Перейти к основному содержимому

1C:Предприятие 8.3

Перем АдресСервера;
Перем ПортСервера;
Перем ТокенАвторизации;
Перем Пакет;

// Получаем объект HTTPСоединение
Функция ПолучитьСоединение()
Если ПортСервера = 443 Тогда
Возврат Новый HTTPСоединение(АдресСервера,ПортСервера,,,,120,Новый ЗащищенноеСоединениеOpenSSL);
КонецЕсли;

Возврат Новый HTTPСоединение(АдресСервера,ПортСервера,,,,120);
КонецФункции

// Получаем объект HTTPЗапрос
Функция ПолучитьЗапрос(Маршрут, ТипКонтента)
Запрос = Новый HTTPЗапрос("/api/" + Маршрут);
Запрос.Заголовки.Вставить("Host", АдресСервера);
Запрос.Заголовки.Вставить("Host", "test.loc");
Запрос.Заголовки.Вставить("Cache-Control", "no-cache");
Запрос.Заголовки.Вставить("Accept", "*/*");
Запрос.Заголовки.Вставить("Connection", "keep-alive");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенАвторизации);
Запрос.Заголовки.Вставить("Content-Type", ТипКонтента);
Возврат Запрос;
КонецФункции

// Преобразование JSON строки в объект Структура
Функция JSONВСтруктуру(ТекстJSON)
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(ТекстJSON);
Структура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат Структура;
КонецФункции

// Создание пакета
Функция СоздатьПакет()
Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("packages", "application/json");
Результат = Соединение.ВызватьHTTPМетод("POST", Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 200 Тогда
Возврат JSONВСтруктуру(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;
Возврат Неопределено;
КонецФункции

// Загрузка изображения
Функция ОтправитьФайл(Пакет, ИмяФайлаДляЗагрузки)
ВыбранныйФайл = Новый Файл(ИмяФайлаДляЗагрузки);
Если НЕ ВыбранныйФайл.Существует() Тогда
Сообщить("Файл не найден!");
Возврат Неопределено;
КонецЕсли;

Если ВыбранныйФайл.Расширение <> ".png"
И ВыбранныйФайл.Расширение <> ".jpg"
И ВыбранныйФайл.Расширение <> ".jpeg"
И ВыбранныйФайл.Расширение <> ".pdf" Тогда
Сообщить("Неверный формат файла!");
Возврат Неопределено;
КонецЕсли;

Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("images/package/" + Пакет, "application/json");
СодержимоеФайла = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДляЗагрузки));
СодержимоеФайла = СтрЗаменить(СодержимоеФайла, Символы.ВК, "");
СодержимоеФайла = СтрЗаменить(СодержимоеФайла, Символы.ПС, "");
Запрос.УстановитьТелоИзСтроки("{""content"":""" + СодержимоеФайла + """}");
Результат = Соединение.ОтправитьДляОбработки(Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 200 Тогда
Возврат JSONВСтруктуру(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;

Возврат Неопределено;
КонецФункции

// Запуск распознавания
Функция ЗапускРаспознавания(Пакет)
Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("packages/" + Пакет + "/start", "application/json");
Результат = Соединение.ОтправитьДляОбработки(Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 204 Тогда
Возврат Истина;
КонецЕсли;

Возврат Ложь;
КонецФункции

// Получение результата распознавания
Функция РезультатРаспознавания(Пакет)
Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("packages/" + Пакет, "application/json");
Результат = Соединение.ВызватьHTTPМетод("GET", Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 200 Тогда
Возврат JSONВСтруктуру(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;

Возврат Неопределено;
КонецФункции

// Получение перечня изображений
Функция ПереченьИзображений(Пакет)
Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("images/package/" + Пакет, "application/json");
Результат = Соединение.ВызватьHTTPМетод("GET", Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 200 Тогда
Возврат JSONВСтруктуру(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;

Возврат Неопределено;
КонецФункции

// Скачивание выровненного изображения
Функция СкачатьИзображение(ИдИзображения)
Соединение = ПолучитьСоединение();
Запрос = ПолучитьЗапрос("images/" + ИдИзображения, "application/json");
Результат = Соединение.ВызватьHTTPМетод("GET", Запрос);
Соединение = Неопределено;

Если Результат.КодСостояния = 200 Тогда
Возврат Результат.ПолучитьТелоКакДвоичныеДанные();
КонецЕсли;

Возврат Неопределено;
КонецФункции

// Пример работы формы
Процедура СоздатьПакетНажатие(Элемент = неопределено)
Результат = СоздатьПакет();
Если ЗначениеЗаполнено(Результат) Тогда
Пакет = Результат.packageId;
Сообщить("Создан пакет: " + Пакет);
КонецЕсли;
КонецПроцедуры

Процедура ОтправитьФайлНажатие(Элемент = неопределено)
Результат = ОтправитьФайл(Формат(Пакет,"ЧГ=0"), "C:\file.jpg"); //Файл для распознавания
Если ЗначениеЗаполнено(Результат) Тогда
Для Каждого ЭлементМассива из Результат.imageIds Цикл
Сообщить("Изображение загружено, присвоен ID: " + ЭлементМассива);
КонецЦикла;
Иначе
Сообщить("Ошибка при загрузки изображения в пакет: " + Пакет);
КонецЕсли;
КонецПроцедуры

Процедура ЗапуститьРаспознаваниеНажатие(Элемент = неопределено)
Результат = ЗапускРаспознавания(Формат(Пакет,"ЧГ=0"));
Если ЗначениеЗаполнено(Результат) Тогда
Сообщить("Запущено распознование пакета " + Пакет);
Иначе
Сообщить("Ошибка при попытке запуска распознование пакета " + Пакет);
КонецЕсли;
КонецПроцедуры

Процедура РезультатыНажатие(Элемент = Неопределено)
Результат = РезультатРаспознавания(Формат(Пакет,"ЧГ=0"));
Если ЗначениеЗаполнено(Результат) Тогда
Если Результат.state = "Recognized" Тогда
Сообщить("Документы распознаны");
Иначе
Сообщить("Документы в процессе распознования");
КонецЕсли;
КонецЕсли;
КонецПроцедуры


// Последовательность запуска процедур
Процедура ВыполнитьВсё()
СоздатьПакетНажатие();
ОтправитьФайлНажатие();
ЗапуститьРаспознаваниеНажатие();
РезультатыНажатие();
КонецПроцедуры


// Назначение глобальных переменных
АдресСервера = "extractor.correct.su";
ПортСервера = 443;
ТокенАвторизации = "INSERT_TOKEN_HERE";

Пример программы